// 引入的是购物车仓库
import {reqShopCart,reqDeleteCartById,reqCheckCartById} from '@/api'

const state = {
    CartList:[]

}
const mutations = {
    GETCARTLIST(state,cartlist){
        state.CartList = cartlist
    }
}
const actions = {
    async getCartList({ commit }) {
        let result = await reqShopCart()
        if (result.code == 200) commit('GETCARTLIST', result.data)
      },

    // 删除购物车里面的商品
    async deleteCartById({ commit },skuId) {
        let result = await reqDeleteCartById(skuId)
        // 此时需要返回是否成功的接到了接口
        if(result.code == 200)
          return "ok";
        else
           return Promise.reject(new Error('faile'));
     // 代表请求失败，返回promise，前面接受也要用promise来接受
      },
    //   修改产品状态,是否选中
      async updataCheckCartById({ commit },{skuId,isChecked}) {
        let result = await reqCheckCartById(skuId,isChecked)
        console.log("result",result);
        // 此时需要返回是否成功的接到了接口
        if(result.code == 200)
          return "ok";
        else
           return Promise.reject(new Error('faile'));
     // 代表请求失败，返回promise，前面接受也要用promise来接受
      },
    //   删除所有选中的商品
    deleteAllCartById({dispatch,getters}){
        // context 小仓库,里面包含commit，dispatch,getters，state等
        // 将购物车里的全部产品放到一个数组里面，确保所有的都删除成功
        let PromiseAll = [];
        getters.cartList.cartInfoList.forEach(item=>{
            if(item.isChecked == 1){
              let promise =   dispatch('deleteCartById',item.skuId)
              PromiseAll.push(promise);
            }
        })
        // 只要全部的p1|p2|p3...都成功，返回结果即为成功
        return Promise.all(PromiseAll)

    }
      

}
const getters = {
    cartList(state){
        return state.CartList[0] || {};
    },

}

export default {
    namespaced: true, //命名空间是防止仓库中出现同名的情况
    state,
    mutations,
    actions,
    getters,
  }